/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.edu.itschapala.ssrp.bean;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.enterprise.context.ApplicationScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.inject.Named;
import mx.edu.itschapala.connect.modelo.Alumno;
import mx.edu.itschapala.ssrp.ln.CatalogoLN;
import mx.edu.itschapala.ssrp.ln.ConnectLN;
import mx.edu.itschapala.ssrp.modelo.IntegranteResidencia;
import mx.edu.itschapala.ssrp.modelo.Proyecto;
import mx.edu.itschapala.ssrp.modelo.Usuario;

import mx.edu.itschapala.ssrp.util.Mail;
import mx.edu.itschapala.ssrp.util.PasswordGenerator;

/**
 *
 * @author pello
 */
@Named(value = "alumnoBean")
@ApplicationScoped
public class AlumnoBean {

    @EJB
    private CatalogoLN catalogoLN;
    @EJB
    private ConnectLN connectLN;

    private List<Alumno> alumnos;
    private Alumno alumno;
    private final PasswordGenerator pg = new PasswordGenerator();
    private final Mail cb = new Mail();
    private Usuario usuario;
    private List<String> maxCreditos;
    private List<Alumno> alumnosConect;
    private List<Usuario> residentes;

    private String conAlum;

    private String correo;
    private Proyecto proyecto;

    public Proyecto getProyecto() {
        return proyecto;
    }

    public String getCorreo() {
        return correo;
    }

    public void setCorreo(String correo) {
        this.correo = correo;
    }

    //private boolean conexion=false;
    public AlumnoBean() {
    }

    public String getConAlum() {
        return conAlum;
    }

    public void setConAlum(String conAlum) {

        this.conAlum = conAlum;
    }

    public List<Alumno> getAlumnosAptos() {

        alumnos = new ArrayList<>();
        if (maxCreditos == null) {
            try {
                maxCreditos = connectLN.getCreditosMaximoPorCarrera();
            } catch (Exception e) {

            }
        }
        if (alumnosConect == null || alumnosConect.isEmpty()) {
            try {
                alumnosConect = connectLN.getAlumnosTodos();
            } catch (Exception e) {

            }
        }
        System.out.println(maxCreditos);
        for (Alumno a : alumnosConect) {
            for (String ca : maxCreditos) {
                if (a.getCarrera().equals(ca.split(":")[0])) {
                    if (a.getCreditos() >= Integer.parseInt(ca.split(":")[1]) * 0.75 && getUsuLog().getAcademia().equals(a.getCarrera())) {
                        if (catalogoLN.getUsuarioPorID(a.getNumControl()) == null) {
                            alumnos.add(a);
                        }
                    }
                }
            }

        }

        return alumnos;
    }

    public Alumno getAlumnoLogueado() {

        String nControl = getUsuLog().getNcontrol();
        alumno = new Alumno();
        alumno.setNumControl(nControl);

        return alumno;

    }

    public Alumno getAlumno() {
        return alumno;
    }

    public void setAlumno(Alumno a) {

        this.alumno = a;

    }

    public void prepararUsuario(ActionEvent e) {
        usuario = new Usuario();
        /*int id = Integer.parseInt(e.getComponent().getClientId().split(":")[2]);
         alumno = alumnos.get(id);*/
        alumno = (Alumno) e.getComponent().getAttributes().get("alum");
        conAlum = alumno.getNumControl();
        //alumno=connectLN.getAlumnoByNcontrol(alumno);
        System.out.println(alumno.getNombre());
        usuario.setNcontrol(alumno.getNumControl());
        usuario.setPassword(pg.pasword());
        usuario.setNombre(alumno.getNombre() + " " + alumno.getApellidoP() + " " + alumno.getApellidoM());
        usuario.setDomicilio(alumno.getDomicilio());
        usuario.setCiudad(alumno.getCiudad());
        usuario.setAcademia(alumno.getCarrera());
        usuario.setTelefono(alumno.getTelefono());
        usuario.setTipoSeguro(alumno.getTipoSeguro());
        usuario.setNumSeguro(alumno.getNumeroSeguro());
        usuario.setPerfil("alumno");

    }

    public void registrarAlumno(ActionEvent e) {
        usuario = new Usuario();
        //int id = Integer.parseInt(e.getComponent().getClientId().split(":")[2]);
        //alumno = alumnos.get(id);
        usuario.setNcontrol(alumno.getNumControl());
        usuario.setPassword(pg.pasword());
        usuario.setPerfil("alumno");
        usuario.setCorreo(alumno.getCorreo());
        usuario.setNombre(alumno.getNombre() + " " + alumno.getApellidoP() + " " + alumno.getApellidoP());
        usuario.setDomicilio(alumno.getDomicilio());
        usuario.setCiudad(alumno.getCiudad());
        usuario.setAcademia(alumno.getCarrera());
        usuario.setTelefono(alumno.getTelefono());
        usuario.setTipoSeguro(alumno.getTipoSeguro());
        usuario.setNumSeguro(alumno.getNumeroSeguro());
        catalogoLN.crearUsuario(usuario);
        cb.correo(usuario.getCorreo(), "Agregado a residencias", "correo de confirmacion con la contraceña de '" + usuario.getPassword() + "' con numero de control '" + usuario.getNcontrol() + "' a nombre de " + usuario.getNombre() + ".");

    }

    public String registrarMail() {
        usuario.setCorreo(correo);
        if (catalogoLN.getUsuarioPorID(alumno.getNumControl()) == null) {
            catalogoLN.crearUsuario(usuario);
        }
        cb.correo(correo, "Agregado a residencias", "correo de confirmacion con la contraceña de '" + usuario.getPassword() + "' con numero de control '" + usuario.getNcontrol() + "' a nombre de " + usuario.getNombre() + ".");
        correo = "";
        getAlumnosAptos();
        return "ListaAspirantes";
    }

    public List<Alumno> getAlumnos() {
        alumnos = connectLN.getAlumnosTodos();
        return alumnos;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Usuario getUsuLog() {
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        Map<String, Object> sessionMap = externalContext.getSessionMap();
        return ((Usuario) sessionMap.get("USUARIO_LOGUEADO"));
    }

    public List<Usuario> getResidentes() {
        residentes = new ArrayList<>();
        String carrera = getUsuLog().getAcademia();

        for (Usuario u : catalogoLN.getUsuarioPorTipo("alumno")) {
            if (u.getAcademia().equals(carrera)) {
                residentes.add(u);
            }
        }

        return residentes;
    }

    public void prepProyecto(String ncontrol) {
        proyecto = catalogoLN.getIntegranteResidenciaPorAlumno(ncontrol).getProyecto();
    }

    public Proyecto getProyPorAlum(String ncontrol) {
        return catalogoLN.getIntegranteResidenciaPorAlumno(ncontrol).getProyecto();
    }

    public String getNombreProyecto(String ncontrol) {
        if (catalogoLN.getIntegranteResidenciaPorAlumno(ncontrol) != null) {
            return catalogoLN.getIntegranteResidenciaPorAlumno(ncontrol).getProyecto().getNombre();
        } else {
            return "SIN PROYECTO";
        }
    }

    public Proyecto getProyectoAlum() {
        IntegranteResidencia r = catalogoLN.getIntegranteResidenciaPorAlumno(getUsuLog().getNcontrol());
        if (catalogoLN.getIntegranteResidenciaPorAlumno(getUsuLog().getNcontrol()) == null) {
            return null;
        } else {
            return r.getProyecto();
        }
    }
}
